為了不讓隊友 panic,先發文,正在修改,有興趣可以明日觀看。
雖然有種種好處,但是一個分散式系統,也有許多問題需要特別注意,
網路不可靠、電腦會當掉,
這也是之後要討論的種種課題~
分散式系統能夠成立,建立於計算機網路的基礎。
而種種網路協定、訊息怎麼被封裝和 encode 並在網路中傳輸,都是計算機網路的範圍。
分散式系統的設計則注重於不同 nodes 之間如何合作完成共同的任務,
例如需要傳送哪些訊息?
要怎麼處理收到的訊息?
Node:節點,通常是指一台裝置,例如手機或電腦。
Link:節點之間需要某種連結,才能夠溝通。例如用電線把兩台地腦接起來、或是透過 Wifi 連上網路。
可以想見的,
一台電腦可能當機、一支手機可能掉到水裡永久 byebye。
Wifi 訊號常常隔了一個牆就衰減很多;
實體線路的話,可以被牛踩、被鯊魚咬、還能被鐵鍬駭客敲爆。
如果車車載著超大容量硬碟從台北到墾丁,
這個 latency 挺高的,需要約 5 個小時,到了地點才能開始傳輸資料。
不過 bandwidth 也很高,如果這是一個能夠高速寫入的 SSD。
OS 告訴我們,一台電腦中的 process 要互相溝通,
可以使用 shared memory、pipe 等,這些稱作 IPC(Inter-process communication)。
而分散式系統中的節點們若需要互相聯繫溝通,則需要透過網路,
常常使用 RPC(Remote Process Call)。
遠端 function call,function definition 跟遠端實際的 function 一樣。
不同的服務間要溝通,
但使用的是不同的語言怎麼辦?
可以程式內部自己處理,但就會需要知道對方傳過來的參數長怎樣,聽起來就很不彈性。
嘛,電腦科學的設計上,沒有什麼是加一層 interface 不能解決的問題(#
為此,定義出一個 language independent interface,
這樣 data type 的轉換就透過 RPC 框架統一處理,
而不需要你我操心。
例如:gRPC 中的 Protocol Buffers